模拟退火(SA) · 遗传算法(GA) · 蚁群算法(ACO) · 粒子群算法(PSO)
原理剖析 + 参数解析 + 适用场景 + 典型案例 + 检测题
SA 区别于贪心搜索的关键在于:即使新解比当前解更差,仍以一定概率接受它。这个概率由 Metropolis 准则给出:
解释:温度 T 越高,e-Δf/T 越接近 1,接受差解的概率越大("乱撞");温度 T 越低,概率越接近 0("精细搜索")。这个从"广泛探索"到"逐步收敛"的动态过程,是 SA 跳出局部最优的根本机制。
• P ≈ 1:几乎接受所有新解
• 搜索范围大,全局探索为主
• 类似金属原子剧烈热运动
• 有机会跨越势垒逃离局部极小
• P → 0:几乎只接受改进解
• 搜索范围小,局部精细搜索
• 类似原子排列趋于稳定
• 在当前最优附近微调
| 策略 | 公式 | 特点 | 适用 |
|---|---|---|---|
| 指数降温 | Tk+1 = α·Tk,α∈(0.85,0.99) | 前期降得慢,后期降得快 | 最常用(PPT采用α=0.995) |
| 线性降温 | Tk = T₀ - k·(T₀-T_f)/N | 均匀下降,简单 | 小规模问题 |
| 对数降温 | Tk = T₀ / ln(1+k) | 极慢下降,理论收敛保证 | 理论分析,实际偏慢 |
| 场景类别 | 典型问题 | SA 适用度 | 说明 |
|---|---|---|---|
| 组合优化 | TSP、车间调度、装箱问题 | 最佳 | 离散解空间,SA 的邻域搜索天然适合 |
| 多目标优化 | Pareto 前沿搜索 | 良好 | 可同时优化多个目标函数 |
| 连续函数优化 | Ackley、Rastrigin 函数 | 可用 | 需设计合适的邻域扰动方式 |
| VLSI 布局 | 芯片元件摆放、布线 | 最佳 | 经典应用,SA 最早就是用于 VLSI 设计 |
| 神经网络 | 超参数调优、权重初始化 | 良好 | 比 Grid Search 更高效 |
| 路径规划 | 机器人路径、物流配送 | 最佳 | 天然适合,常用 2-opt 邻域 |
| 参数组 | T₀ | α | T_f | L_T | 最优路径 | 时间 | 评价 |
|---|---|---|---|---|---|---|---|
| 组一(优) | 10³ | 0.995 | 10⁻¹² | 1000 | 39335.6 | 123s | 质量高,时间长 |
| 组二(快) | 10³ | 0.995 | 10⁻¹² | 10 | 42470.9 | 1.7s | 速度快,质量降 |
⚠ 关键发现:L_T(每温度采样次数)从 1000 降至 10,路径长度增加约 8%,但时间缩短 98%。在实际工程中需要在"解质量"与"计算时间"之间权衡。
1. 模拟退火算法中,Metropolis 准则的核心设计意图是什么?
2. SA 求解 TSP 时,L_T(每温度迭代次数)从 1000 降到 10 会导致什么?
3. SA 中降温系数 α 越接近 1(如 0.995),意味着什么?
| 编码类型 | 表示方式 | 适用问题 | 优点 | 缺点 |
|---|---|---|---|---|
| 二进制编码 | 01001101... | 背包、特征选择 | 编码/解码简单,交叉变异方便 | 难以表达解特征,精度有限 |
| 整数编码 | [1,5,3,8,2,6,7,4] | TSP、调度排序 | 表达简单,天然适合排列问题 | 需专门设计交叉/变异算子 |
| 浮点数编码 | [2.35,-1.67,4.02] | 连续函数优化 | 精度高,适合大范围搜索 | 交叉变异需限制范围 |
| 场景类别 | 典型问题 | GA 适用度 | 说明 |
|---|---|---|---|
| 复杂非线性优化 | 多峰函数、不可微函数 | 最佳 | 不依赖梯度,天然适合黑箱优化 |
| TSP/VRP | 旅行商、车辆路径 | 最佳 | 整数编码+交叉变异天然适合排列问题 |
| 特征选择 | 高维数据降维 | 最佳 | 二进制编码"选/不选"特征 |
| 神经网络结构搜索 | NAS(神经架构搜索) | 良好 | 可编码网络层数和节点数 |
| 参数优化 | PID调参、机械设计 | 良好 | 浮点数编码,多目标优化 |
| 调度问题 | 车间作业、考试安排 | 最佳 | 整数编码,天然适合排序调度 |
1. TSP 结构保证有效性:排列编码下,单点交叉产生的子代仍然是合法排列(从中断点取父1前半 + 父2去掉父1前半已用城市后剩下的)。不会出现"访问同一城市两次"。
2. 变异打破局部最优:3~10-opt 随机变异是 TSP 领域已知的强局部搜索算子,保证每个个体都有机会逃离当前局部最优。
3. 精英选择兜底:父+子+变异三代竞争,即使交叉变异产生劣解,精英选择也会淘汰它们。确保了"只会进步,不会退步"。
4. 数值实验验证:PPT 中 50 代后收敛到 39.2h 以内,证明了此策略的有效性。
1. GA 中轮盘赌选择遵循什么原则?
2. TSP 问题适合采用哪种编码方式?为什么?
3. GA 中变异操作的主要目的是什么?
| 符号 | 含义 | PPT 取值 | 作用 |
|---|---|---|---|
| τij | 边(i,j)的信息素浓度 | 初始全为 1 | 反映群体经验——走过的蚂蚁越多,浓度越高 |
| ηij = 1/dij | 能见度(启发信息) | 距离的倒数 | 反映局部贪心——越近的城市越有吸引力 |
| α | 信息素重要因子 | 1 | α 越大,越依赖群体经验(跟随蚁群) |
| β | 能见度重要因子 | 5 | β 越大,越依赖局部距离(贪心选择) |
| ρ | 信息素挥发因子 | 0.1 | 每轮保留 90% 旧信息素 |
组合优化中信息素记录在边上(相邻两点之间);连续优化中信息素留存在蚂蚁经过的点上,影响该点附近区域。搜索方式从"离散跳跃"变为"小步快走"——每个蚂蚁移动前先进行 10 次局部随机探测,选择最好的方向前进。全局搜索系数 1/√T 和局部搜索半径 2/T² 随迭代次数 T 自适应衰减。
| 场景类别 | 典型问题 | ACO 适用度 | 说明 |
|---|---|---|---|
| TSP / VRP | 旅行商、车辆路径规划 | 最佳 | ACO 最经典的应用领域 |
| 网络路由 | 通信网络、物流配送 | 最佳 | 蚂蚁=数据包,信息素=链路质量 |
| 资源调度 | 机器调度、云计算资源分配 | 最佳 | 天然适合"分配问题" |
| 连续函数优化 | Ackley、Griewank 等 | 良好 | 需适配:信息素从边上改为点上 |
| 图像分割 | 聚类、边缘检测 | 可用 | 蚂蚁在图像上移动,信息素标记区域 |
1. ACO 中信息素挥发因子 ρ 的核心作用是什么?
2. 蚂蚁选择下一城市的概率由哪两大核心因素共同决定?
3. ACO 求解连续优化问题时,与求解 TSP 最大的不同是什么?
| 参数 | 含义 | 典型值 | 过大 | 过小 |
|---|---|---|---|---|
| ω | 惯性权重 | 0.9→0.4(递减) | 粒子"乱飞",不收敛 | 快速停下来,陷入局部最优 |
| c₁ | 认知学习因子 | 2.0 | 粒子过度独立,收敛慢 | 缺乏自我探索,过度依赖群体 |
| c₂ | 社会学习因子 | 2.0 | 过早聚集,多样性丧失 | 群体信息利用不足 |
| vmax | 最大速度 | 搜索空间宽度的 10%~20% | 可能飞过最优解 | 搜索范围受限 |
| m | 种群大小 | 20~40(简单)/ 100~200(困难) | 计算量增大,收益递减 | 多样性不足 |
| 场景类别 | 典型问题 | PSO 适用度 | 说明 |
|---|---|---|---|
| 连续函数优化 | Schaffer、Rastrigin 等多峰函数 | 最佳 | PSO 的天然优势领域 |
| 工程参数优化 | PID 控制器、机械设计参数 | 最佳 | PPT 中非线性约束优化案例即此类 |
| 神经网络训练 | 权重优化、超参数调优 | 良好 | 比反向传播更不易陷入局部最优 |
| 电力系统优化 | 最优潮流、机组组合 | 最佳 | 多约束、高维度场景 |
| 组合优化 | TSP、调度 | 可用 | 需离散化适配(如 BPSO) |
1. PSO 速度公式中惯性因子 ω 的主要作用是?
2. PSO 与 GA 相比,最本质的区别是什么?
3. PPT 中 Schaffer 函数优化案例,为避免 PSO 陷入局部最优采用了什么策略?
| 维度 | SA 模拟退火 | GA 遗传算法 | ACO 蚁群算法 | PSO 粒子群 |
|---|---|---|---|---|
| 灵感 | 金属退火 | 自然进化 | 蚂蚁觅食 | 鸟群觅食 |
| 搜索方式 | 单点迭代(独狼) | 种群并行 | 种群并行 | 种群并行 |
| 核心机制 | Metropolis 概率接受 | 选择+交叉+变异 | 信息素正反馈+挥发 | 速度-位移模型 |
| 关键参数 | T₀, α, Tf, L_T | M, G, pc, pm | m, α, β, ρ | m, ω, c₁, c₂, vmax |
| 逃离局部最优 | 概率接受差解 | 变异+种群多样性 | 信息素挥发+随机选择 | 惯性+自适应变异 |
| 适合问题 | 组合优化、多目标 | 复杂非线性、多模态 | TSP、路由、调度 | 高维连续、工程优化 |
| 实现难度 | ★ 简单 | ★★★ 复杂 | ★★ 中等 | ★ 简单 |
| 收敛速度 | ★★ 中等 | ★ 较慢 | ★ 较慢 | ★★★ 快 |